import java.util.ArrayList;
/**
 * Questa classe si occupa di recuperare le frasi da indovinare dal file impostazioni.xml,
 * controllarne la correttezza ed estrarre i relativi suggerimenti, utilizzando strutture
 * dati che rendano veloce e pratico l'accesso ai dati stessi da parte di altri metodi.
 * 
 * @author Matteo Francia
 */
public class PhrasesRetriever 
{
    // carattere utilizzato per segnalare la fine di una frase
    private final char delimiter='.';
    // lista contenente le frasi recuperate dal file impostazioni.xml
    private ArrayList<String> phrasesFromFile;
    // lista contenente le frasi analizzate e divise nei loro componenti
    // base: i caratteri
    private ArrayList<Character> phrases=new ArrayList<Character>();
    
    /**
     * Recupera le frasi inserite nel file impostazioni.xml, verifica che rispettino
     * la lunghezza massima e le inserisce nell 'array list 
     * le frasi da indovinare.
     */
    public ArrayList<Character> retrievePhrases()
    {
        XMLReader reader=new XMLReader();
        
        phrasesFromFile=reader.getPhrases();
        
        // Controlla che le frasi rispettino la lunghezza massima, i suggerimenti 
        // non vengono controllati in quanto non soggetti a restrizioni.
        for(int i=0;i<phrasesFromFile.size();i++)
        {
           if(i%2 == 0)
           {
               if(phraseControl(i))
               {}
               else
               {
                   System.out.println("Attenzione!\n la frase numero "+i+" non e' visualizzabile."); 
               }
           }
        }
                
        return phrases;
    }
    
    /**
     * Recupera i suggerimenti appoggiandosi sul metodo {@link getPhrases()} 
     * della classe {@link XMLReader}
     * 
     * @return un array contenente i suggerimenti
     */
    public String[] retrieveHints()
    {
        XMLReader reader=new XMLReader();
        
        phrasesFromFile=reader.getPhrases();
        // creo un array per contenere i suggerimenti
        // grande la metà della somma totale di frasi e 
        // suggerimenti
        String[] hints=new String[phrasesFromFile.size()/2];
        int hintPosition=0;
        
        for(int i=0;i<phrasesFromFile.size();i++)
        {
            if(i%2!=0 && hintPosition<hints.length)
            {
                    //System.out.println("Aggiungo \""+phrasesFromFile.get(i)+"\"in posizione "+hintPosition);
                    hints[hintPosition]=phrasesFromFile.get(i);
                    hintPosition++;
            }
        }
        /*for(int c=0;c<hints.length;c++)
                {
                    System.out.println(hints[c]);
                }*/
        
        return hints;
    }
    
    /**
     * Metodo di appoggio per {@link retrievePhrases()}, si occupa
     * solamente di controllare la lunghezza della frase ed inserirla 
     * in un PhrasesRetriever di oggetti Character
     * 
     * @param i numero della locazione in cui si trova la frase da analizzare
     * @return true se la frase è corretta
     */
    private boolean phraseControl(int i)
    {
        boolean correctPhrase=true;
        // Suddivide la frase in caratteri
        char[] phrase=phrasesFromFile.get(i).toCharArray();
        
        if(phrase.length >= 104)
        {
            correctPhrase=false;
        }
        
        // aggiunge la frase all'PhrasesRetriever
        if(correctPhrase)
        {
            Character c;
            for(int b=0;b<phrase.length;b++)
            {
                   c=phrase[b];
                   phrases.add(c);
            }
            c=delimiter;
            phrases.add(c);
        }
        
        return correctPhrase;
    }
    
     public static void main(String[] aaa)
    {
        PhrasesRetriever pr=new PhrasesRetriever();
        pr.retrievePhrases();
    }
     
}